// pages/test/test.js
import gaiaManager from '../../utils/gaiaManager.js'
import bluetoothManager from '../../utils/bluetooth.js'

Page({
  data: {
    testResults: [],
    isRunning: false
  },

  onLoad() {
    this.addTestResult('页面加载完成')
  },

  // 添加测试结果
  addTestResult(message, type = 'info') {
    const timestamp = new Date().toLocaleTimeString()
    const result = {
      timestamp,
      message,
      type
    }
    
    this.setData({
      testResults: [...this.data.testResults, result]
    })
    
    console.log(`[${timestamp}] ${message}`)
  },

  // 清空测试结果
  clearResults() {
    this.setData({
      testResults: []
    })
  },

  // 测试GAIA管理器基本功能
  async testGaiaManager() {
    this.setData({ isRunning: true })
    this.addTestResult('开始测试GAIA管理器...', 'info')
    
    try {
      // 测试1: 检查GAIA管理器状态
      this.addTestResult('测试1: 检查GAIA管理器初始状态')
      this.addTestResult(`连接状态: ${gaiaManager.isConnected}`, 'info')
      this.addTestResult(`设备ID: ${gaiaManager.deviceId || '未设置'}`, 'info')
      
      // 测试2: 设置设备ID
      this.addTestResult('测试2: 设置设备ID')
      const testDeviceId = 'test-device-123'
      gaiaManager.setDeviceId(testDeviceId)
      this.addTestResult(`设置设备ID: ${testDeviceId}`, 'success')
      
      // 测试3: 设置连接状态
      this.addTestResult('测试3: 设置连接状态')
      gaiaManager.setConnected(true)
      this.addTestResult(`设置连接状态: ${gaiaManager.isConnected}`, 'success')
      
      // 测试4: 测试连接流程（不依赖实际设备）
      this.addTestResult('测试4: 测试连接流程（模拟）')
      this.addTestResult('注意: 此测试需要实际连接的设备', 'warning')
      
      this.addTestResult('GAIA管理器基本功能测试完成', 'success')
      
    } catch (error) {
      this.addTestResult(`测试失败: ${error.message}`, 'error')
    } finally {
      this.setData({ isRunning: false })
    }
  },

  // 测试蓝牙连接状态
  async testBluetoothStatus() {
    this.setData({ isRunning: true })
    this.addTestResult('开始测试蓝牙连接状态...', 'info')
    
    try {
      // 检查蓝牙适配器状态
      this.addTestResult('检查蓝牙适配器状态...')
      const adapterState = await wx.getBluetoothAdapterState()
      this.addTestResult(`蓝牙适配器状态: ${adapterState.available ? '可用' : '不可用'}`, 'info')
      this.addTestResult(`蓝牙是否开启: ${adapterState.available && adapterState.discovering ? '是' : '否'}`, 'info')
      
      // 检查已连接设备
      this.addTestResult('检查已连接设备...')
      try {
        const connectedDevices = await wx.getConnectedBluetoothDevices({
          services: []
        })
        this.addTestResult(`已连接设备数量: ${connectedDevices.devices.length}`, 'info')
        
        if (connectedDevices.devices.length > 0) {
          connectedDevices.devices.forEach((device, index) => {
            this.addTestResult(`设备${index + 1}: ${device.name || '未知'} (${device.deviceId})`, 'info')
          })
        } else {
          this.addTestResult('没有已连接的设备', 'warning')
        }
      } catch (error) {
        this.addTestResult(`获取已连接设备失败: ${error.errMsg}`, 'error')
      }
      
      this.addTestResult('蓝牙连接状态测试完成', 'success')
      
    } catch (error) {
      this.addTestResult(`蓝牙状态测试失败: ${error.message}`, 'error')
    } finally {
      this.setData({ isRunning: false })
    }
  },

  // 测试服务发现（需要实际连接的设备）
  async testServiceDiscovery() {
    this.setData({ isRunning: true })
    this.addTestResult('开始测试服务发现...', 'info')
    
    try {
      // 检查是否有连接的设备
      const connectedDevices = await wx.getConnectedBluetoothDevices({
        services: []
      })
      
      if (connectedDevices.devices.length === 0) {
        this.addTestResult('没有连接的设备，无法测试服务发现', 'warning')
        return
      }
      
      // 使用第一个连接的设备进行测试
      const testDevice = connectedDevices.devices[0]
      this.addTestResult(`使用设备进行测试: ${testDevice.name || '未知'} (${testDevice.deviceId})`, 'info')
      
      // 设置GAIA管理器
      gaiaManager.setDeviceId(testDevice.deviceId)
      gaiaManager.setConnected(true)
      
      // 尝试获取服务
      this.addTestResult('尝试获取设备服务...')
      const services = await gaiaManager.getServices()
      
      if (services && services.length > 0) {
        this.addTestResult(`成功获取服务，数量: ${services.length}`, 'success')
        services.forEach((service, index) => {
          this.addTestResult(`服务${index + 1}: ${service.uuid}`, 'info')
        })
        
        // 查找GAIA服务
        this.addTestResult('查找GAIA服务...')
        const gaiaService = gaiaManager.findGaiaService(services)
        if (gaiaService) {
          this.addTestResult(`找到GAIA服务: ${gaiaService.uuid}`, 'success')
          
          // 尝试获取特征值
          this.addTestResult('尝试获取特征值...')
          gaiaManager.serviceId = gaiaService.uuid
          const characteristics = await gaiaManager.getCharacteristics()
          
          if (characteristics && characteristics.length > 0) {
            this.addTestResult(`成功获取特征值，数量: ${characteristics.length}`, 'success')
            characteristics.forEach((char, index) => {
              this.addTestResult(`特征值${index + 1}: ${char.uuid}`, 'info')
            })
            
            // 查找GAIA特征值
            this.addTestResult('查找GAIA特征值...')
            const gaiaCharacteristic = gaiaManager.findGaiaCharacteristic(characteristics)
            if (gaiaCharacteristic) {
              this.addTestResult(`找到GAIA特征值: ${gaiaCharacteristic.uuid}`, 'success')
            } else {
              this.addTestResult('未找到GAIA特征值', 'warning')
            }
          } else {
            this.addTestResult('未找到特征值', 'warning')
          }
        } else {
          this.addTestResult('未找到GAIA服务', 'warning')
        }
      } else {
        this.addTestResult('未找到任何服务', 'warning')
      }
      
      this.addTestResult('服务发现测试完成', 'success')
      
    } catch (error) {
      this.addTestResult(`服务发现测试失败: ${error.message}`, 'error')
    } finally {
      this.setData({ isRunning: false })
    }
  },

  // 运行所有测试
  async runAllTests() {
    this.clearResults()
    this.addTestResult('开始运行所有测试...', 'info')
    
    await this.testGaiaManager()
    await this.testBluetoothStatus()
    await this.testServiceDiscovery()
    
    this.addTestResult('所有测试完成', 'success')
  }
})

